sgdk: z80_ctrl.h File Reference

sgdk

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

Defines | Functions
z80_ctrl.h File Reference

Z80 control. More...

Go to the source code of this file.

## Defines

#define | Z80_HALT_PORT 0xA11100
#define | Z80_RESET_PORT 0xA11200
#define | Z80_RAM_START 0xA00000
#define | Z80_RAM_END 0xA01FFF
#define | Z80_RAM Z80_RAM_START
#define | Z80_RAM_LEN ((Z80_RAM_END - Z80_RAM_START) + 1)
#define | Z80_YM2612 0xA04000
#define | Z80_BANK_REGISTER 0xA06000
#define | Z80_DRV_COMMAND 0xA00100
#define | Z80_DRV_STATUS 0xA00102
#define | Z80_DRV_PARAMS 0xA00104
#define | Z80_DRV_COM_PLAY_SFT 0
#define | Z80_DRV_COM_STOP_SFT 4
#define | Z80_DRV_STAT_PLAYING_SFT 0
#define | Z80_DRV_STAT_READY_SFT 7
#define | Z80_DRV_COM_PLAY (1 << Z80_DRV_COM_PLAY_SFT)
#define | Z80_DRV_COM_STOP (1 << Z80_DRV_COM_STOP_SFT)
#define | Z80_DRV_STAT_PLAYING (1 << Z80_DRV_STAT_PLAYING_SFT)
#define | Z80_DRV_STAT_READY (1 << Z80_DRV_STAT_READY_SFT)
#define | Z80_DRV_CH0_SFT 0
#define | Z80_DRV_CH1_SFT 1
#define | Z80_DRV_CH2_SFT 2
#define | Z80_DRV_CH3_SFT 3
#define | Z80_DRV_CH0 (1 << Z80_DRV_CH0_SFT)
#define | Z80_DRV_CH1 (1 << Z80_DRV_CH1_SFT)
#define | Z80_DRV_CH2 (1 << Z80_DRV_CH2_SFT)
#define | Z80_DRV_CH3 (1 << Z80_DRV_CH3_SFT)
#define | Z80_DRIVER_NULL 0
#define | Z80_DRIVER_PCM 1
#define | Z80_DRIVER_2ADPCM 2
#define | Z80_DRIVER_4PCM_ENV 4
#define | Z80_DRIVER_MVS 5
#define | Z80_DRIVER_TFM 6
#define | Z80_DRIVER_VGM 7
#define | Z80_DRIVER_XGM 8
#define | Z80_DRIVER_CUSTOM -1
#define | Z80_DRIVER_DEFAULT Z80_DRIVER_PCM

## Functions

void | Z80_init ()
| Initialize Z80 sub system.
u16 | Z80_isBusTaken ()
| Return Z80 BUS taken state.
void | Z80_requestBus (u16 wait)
| Request Z80 BUS.
void | Z80_releaseBus ()
| Release Z80 BUS.
void | Z80_startReset ()
| Start Z80 reset.
void | Z80_endReset ()
| End Z80 reset.
void | Z80_setBank (const u16 bank)
| Set Z80 memory bank.
u8 | Z80_read (const u16 addr)
| Read Z80 memory (Z80_RAM).
void | Z80_write (const u16 addr, const u8 value)
| Write to Z80 memory (Z80_RAM).
void | Z80_clear (const u16 dest, const u16 size, const u16 resetz80)
| Clear Z80 memory.
void | Z80_upload (const u16 dest, const u8 *data, const u16 size, const u16 resetz80)
| Upload data in Z80 memory.
void | Z80_download (const u16 from, u8 *dest, const u16 size)
| Read data from Z80 memory.
u16 | Z80_getLoadedDriver ()
| Return currently loaded Z80 driver.
void | Z80_unloadDriver ()
| Unload Z80 driver (actually clear Z80 ram).
void | Z80_loadDriver (const u16 driver, const u16 waitReady)
| Load a Z80 driver.
void | Z80_loadCustomDriver (const u8 *drv, u16 size)
| Load a custom Z80 driver.
u16 | Z80_isDriverReady ()
| Return driver ready state (only for non custom driver).

## Detailed Description

Z80 control.

Author:
  Stephane Dallongeville

Date:
  08/2011

This unit provides Z80 access from the YM2612 :

- enable / disable Z80
- request / release Z80 BUS
- upload / download data to / from Z80 memory
- set Z80 external Bank
- Z80 driver handling

## Define Documentation

#define Z80_BANK_REGISTER 0xA06000

Z80 Bank register address.

#define Z80_DRIVER_2ADPCM 2

2 channels PCM sample player Z80 driver.
It can mix 2 samples (4 bit PCM) at a fixed 22 Khz rate.

#define Z80_DRIVER_4PCM_ENV 4

4 channels sample player Z80 driver with envelop control.
It can mix 4 samples (8 bit signed) at a fixed 16 Khz rate
and handle volume (16 levels) for each channel.

#define Z80_DRIVER_CUSTOM -1

CUSTOM Z80 driver.

#define Z80_DRIVER_MVS 5

MVS tracker Z80 driver (updated to last version with PCM and PSG support).

#define Z80_DRIVER_NULL 0

NULL Z80 driver.

#define Z80_DRIVER_PCM 1

Variable rate sample player Z80 driver.
It can play a sample (8 bit signed) from 8 Khz up to 32 Khz rate.

#define Z80_DRIVER_TFM 6

TFM tracker Z80 driver.

#define Z80_DRIVER_VGM 7

VGM Z80 driver.
It supports 1 PCM channel at a fixed 8 Khz and allows to play SFX through the named PCM channel.
Written by Sigflup and kubilus1.

#define Z80_DRIVER_XGM 8

eXtended VGM music player driver.
This driver takes VGM (or XGM) file as input to play music.
It supports 4 PCM channels at a fixed 14 Khz and allows to play SFX through PCM with 16 level of priority.
The driver is designed to avoid DMA contention when possible (depending CPU load).

#define Z80_DRV_CH0 (1 << Z80_DRV_CH0_SFT)

Z80 default driver channel 0 id.

#define Z80_DRV_CH1 (1 << Z80_DRV_CH1_SFT)

Z80 default driver channel 1 id.

#define Z80_DRV_CH2 (1 << Z80_DRV_CH2_SFT)

Z80 default driver channel 2 id.

#define Z80_DRV_CH3 (1 << Z80_DRV_CH3_SFT)

Z80 default driver channel 3 id.

#define Z80_DRV_COM_PLAY (1 << Z80_DRV_COM_PLAY_SFT)

Z80 default driver play command.

#define Z80_DRV_COM_STOP (1 << Z80_DRV_COM_STOP_SFT)

Z80 default driver stop command.

#define Z80_DRV_COMMAND 0xA00100

Z80 default driver command address.

#define Z80_DRV_PARAMS 0xA00104

Z80 default driver parameters address.

#define Z80_DRV_STAT_PLAYING (1 << Z80_DRV_STAT_PLAYING_SFT)

Z80 default driver play status.

#define Z80_DRV_STAT_READY (1 << Z80_DRV_STAT_READY_SFT)

Z80 default driver ready status.

#define Z80_DRV_STATUS 0xA00102

Z80 default driver status address.

#define Z80_RAM Z80_RAM_START

Z80 RAM address.

#define Z80_RAM_END 0xA01FFF

Z80 RAM end address.

#define Z80_RAM_LEN ((Z80_RAM_END - Z80_RAM_START) + 1)

Z80 RAM length in byte.

#define Z80_RAM_START 0xA00000

Z80 RAM start address.

#define Z80_YM2612 0xA04000

Z80 YM2612 port address.

## Function Documentation

void Z80_clear | ( | const u16 | dest,
|  | const u16 | size,
|  | const u16 | resetz80
| ) |  |

Clear Z80 memory.

Parameters:

  dest | Destination address (Z80 memory).
  size | Size in byte of region to clear.
  resetz80 | Reset Z80 if set to TRUE.

void Z80_download | ( | const u16 | from,
|  | u8 * | dest,
|  | const u16 | size
| ) |  |

Read data from Z80 memory.

Parameters:

  from | Source address (Z80 memory).
  dest | Destination where to write data.
  size | Size in byte of data to read.

u16 Z80_getLoadedDriver | ( |  | ) |

Return currently loaded Z80 driver.

Possible returned values are:

- Z80_DRIVER_NULL
- Z80_DRIVER_PCM
- Z80_DRIVER_2ADPCM
- #Z80_DRIVER_4PCM
- Z80_DRIVER_4PCM_ENV
- Z80_DRIVER_MVS
- Z80_DRIVER_TFM
- Z80_DRIVER_VGM
- Z80_DRIVER_XGM
- Z80_DRIVER_CUSTOM

void Z80_init | ( |  | ) |

Initialize Z80 sub system.

Request Z80 BUS and reset bank number.

void Z80_loadCustomDriver | ( | const u8 * | drv,
|  | u16 | size
| ) |  |

Load a custom Z80 driver.

Parameters:

  drv | Pointer to the driver binary to load.
  size | Size (in bytes) of the driver binary.

void Z80_loadDriver | ( | const u16 | driver,
|  | const u16 | waitReady
| ) |  |

Load a Z80 driver.

Parameters:

  driver

  Driver to load, possible values are:
  - Z80_DRIVER_NULL
  - Z80_DRIVER_PCM
  - Z80_DRIVER_2ADPCM
  - #Z80_DRIVER_4PCM
  - Z80_DRIVER_4PCM_ENV
  - Z80_DRIVER_MVS
  - Z80_DRIVER_TFM
  - Z80_DRIVER_VGM
  - Z80_DRIVER_XGM

  waitReady | Wait for driver to be ready.

u8 Z80_read | ( | const u16 | addr | ) |

Read Z80 memory (Z80_RAM).

Parameters:

  addr | Address to read (relative to start of Z80_RAM).

You need to request Z80 BUS to access Z80 memory.

See also:
  Z80_requestBus(u16)

void Z80_requestBus | ( | u16 | wait | ) |

Request Z80 BUS.

Parameters:

  wait | Wait for BUS request operation to complete.

void Z80_setBank | ( | const u16 | bank | ) |

Set Z80 memory bank.

Parameters:

  bank | Bank number to set (0x000-0x1FF)

void Z80_upload | ( | const u16 | dest,
|  | const u8 * | data,
|  | const u16 | size,
|  | const u16 | resetz80
| ) |  |

Upload data in Z80 memory.

Parameters:

  dest | Destination address (Z80 memory).
  data | Data to upload.
  size | Size in byte of data to upload.
  resetz80 | Reset Z80 if set to TRUE.

void Z80_write | ( | const u16 | addr,
|  | const u8 | value
| ) |  |

Write to Z80 memory (Z80_RAM).

Parameters:

  addr | Address to write (relative to start of Z80_RAM).
  value | Value to write.

You need to request Z80 BUS to access Z80 memory.

See also:
  Z80_requestBus(u16)

All Classes Files Functions Variables Typedefs Enumerations Defines